C is a general purpose programming language which features economy of expression and a rich set of operators. Because of its absence of restrictions and its generality, it has become a programming language of choice for many tasks even over more powerful languages. Since its introduction, C language has been growing at a fast pace in popularity. Many different compilers are developed for this same purpose. The introduction of varied compilers and the changes to the language over the years led to a need for a common language standard. In 1983, The American National Standards Institute (ANSI) established a committee whose goal was to produce a machine-independent definition of the language. The result is the ANSI standard for C.
C language provides for statement groupings, decision makings, selection of different set of possible cases, looping and termination of a test at the top or bottom, early loop exits and other required control-flow constructions. As a result, however, the program can have layers and be nested. Nesting is the allowing one or more structures of one kind into a structure of the same kind. For example a loop can be nested within another loop or a subroutine can be nested within a different subroutine. This method usually is used to allow the completion of programs of different hierarchial level and allow the recursive accessing of data. C language also allows for function calls. A function call generally is an expression that moves the path of execution from the current function to another specified function as well as evaluating to the return value provided by the called function. A function call contains the name of the function to which control moves and a parenthesize list of values. Function calls can also be nested.
Many compilers and other Unix based processors that utilize C language have developed the idea of using load modules for multi-processor environments. A load module is all or a part of a computer program in a form suitable for loading into main storage for execution. A load module is usually the output of a linkage editor and contains all the links that need to be made during the execution. It is possible to have more than one load module executing at one time with today's computers, each providing a distinct processing environment than one another.
It is desirable to have instructions and functions that can operate across different processing environment and especially across processing load modules when running a programming language such as C language. There are several instructions and functions like setjmp/longjmp and signal/raise that are ANSI standard C language instructions and functions but cannot operate across different load modules and processing environment. Setjmp and longjmp allow the user to do a non-local goto across nested function calls within a single C load module.
Similarly, signal and raise allow the user to activate a signal handler within a single C load module. These functions do not work across multiple C load modules (especially not the Dynamic Link Library or DLLs) at present. For example, on MVS operating system, a signal handler can only be coded within the same C load module that issued the signal and raise command. Some efforts have been made to allow some transferability when the second load module is a DLL. However, when using a DLL, extensive efforts have to be utilized to package all data sent as a DLL package which takes away from the ease of use and flexibility desired in such instances.
This application is being filed at the same day as related application Ser. No. 09/018,205, attorney docket PO997117.